/*
 * Copyright (c) 2022  by Junzhao
 * THIS FILE IS PART OF JAVASE Song Huongkang PROJECT
 * All Rights Reserved.
 */

package 日期与时间.JDK8之后;

import org.junit.Test;

import java.time.*;

/**
 * @description  Instant 瞬间
 *  Instant：时间线上的一个瞬时点。 这可能被用来记录应用程序中的事件时间戳。
 *
 *  在处理时间和日期的时候，我们通常会想到年,月,日,时,分,秒。然而，这只是
 *  时间的一个模型，是面向人类的。第二种通用模型是面向机器的，或者说是连
 *  续的。在此模型中，时间线中的一个点表示为一个很大的数，这有利于计算机
 *  处理。在UNIX中，这个数从1970年开始，以秒为的单位；同样的，在Java中，
 *  也是从1970年开始，但以毫秒为单位。
 *
 *  java.time包通过值类型Instant提供机器视图，不提供处理人类意义上的时间
 *  单位。Instant表示时间线上的一点，而不需要任何上下文信息，例如，时区。
 *  概念上讲，它只是简单的表示自1970年1月1日0时0分0秒（UTC）开始的秒
 *  数。因为java.time包是基于纳秒计算的，所以Instant的精度可以达到纳秒级。
 *
 *  (1 ns = 10-9 s) 1秒 = 1000毫秒 =10^6微秒=10^9纳秒
 * @author 俊昭
 * @date 2022/4/17
*/
public class InstantTest {
    @Test
    public void ITTEST(){
        Instant t1 = Instant.now();
        System.out.println(t1);// 2022-04-17T06:30:04.742Z 差了八个小时因为时区 以格林尼治时间为标准

        Instant t2 = Instant.ofEpochMilli(90000000000L);// 1970年1月1日0时0分0秒基础上加90000000000毫秒
        System.out.println(t2);// 1972-11-07T16:00:00Z


        // 结合即时的偏移来创建一个 OffsetDateTime
        OffsetDateTime offsetDateTime = t1.atOffset(ZoneOffset.ofHours(8));
        System.out.println(offsetDateTime);// 2022-04-17T15:08:00.343+08:00

        // 获取时间戳
        System.out.println(t1.toEpochMilli());// 1650179443174

    }
}
